package br.com.guarana.util;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * Classe com funções utilitárias
 * @author Rogério Cruz Sousa
 * @since 28.agosto.2009
 */
public class Util {

    //rotinas utilitárias~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    public static String isNullOrEmpty(String s) {
        if (s == null) {
            return "";
        } else if (s.trim().equals("")) {
            return "";
        }
        return s;
    }

    public static String colocaWhereOuAnd(String s) {
        if (s == null) {
            return "";
        }

        if (s.contains("WHERE")) {
            return " AND";
        } else {
            return " WHERE";
        }
    }

    public static String preencheZerosAEsquerda(String str, Integer qtde) {
        if (str == null) {
            return "";
        }

        String s = str.trim();
        while (s.length() < qtde) {
            s = '0' + s;
        }

        s = s.substring(0, qtde);

        return s;
    }

    public static String completaComEspacoDireita(String str, Integer qtde) {
        String s = str.trim();
        while (s.length() < qtde) {
            s = s + ' ';
        }
        s = s.substring(0, qtde);
        return s;
    }

    public static String completaComEspacoEsquerda(String str, Integer qtde) {
        String s = str.trim();
        while (s.length() < qtde) {
            s = ' ' + s;
        }
        s = s.substring(0, qtde);
        return s;
    }

    public static String svdPadding(int tamanho, String posicao, String cadeia, String preenche) {
        String retorno = "";
        StringBuffer stbTransformacao = new StringBuffer(cadeia);
        int repeticao = tamanho - cadeia.length();

        if (repeticao > 0) {
            for (int x = 0; x < repeticao; x++) {
                if (posicao.equals("R")) {
                    stbTransformacao.append(preenche);
                } else {
                    stbTransformacao.insert(0, preenche);
                }
            }
            retorno = stbTransformacao.toString();
        } else {
            retorno = cadeia.substring(0, tamanho);
        }

        return retorno;
    }

    //Função para criar hash md5
    public static String calculaHashMD5(String data) {
        try {
            byte[] mybytes = data.getBytes();
            MessageDigest md5 = MessageDigest.getInstance("MD5");
            byte[] md5digest = md5.digest(mybytes);

            //System.out.println("Hash calculado =" + MapeadorUtil.bytesToHex(md5digest));
            return Util.bytesToHex(md5digest);

        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
            return null;
        }
    }

    private static String bytesToHex(byte[] b) {
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < b.length; ++i) {
            sb.append((Integer.toHexString((b[i] & 0xFF) | 0x100)).substring(1, 3));
        }
        return sb.toString();
    }
}
